﻿using System;

namespace InDepth2Demo.Model
{
    public class Person : ICloneable
    {
        public object Clone()
        {
            throw new NotImplementedException();
        }

        DateTime birth;
        DateTime? death;
        string name;

        public TimeSpan Age
        {
            get
            {
                if (death == null)                  // 调用了 death.HasValue 属性
                {
                    return DateTime.Now - birth;
                }
                else
                {
                    return death.Value - birth;     // 拆包以进行计算  
                }                                   // 为什么一定要对值进行拆包处理呢? 为什么不能直接返回 death - birth 呢? 在 death 为 null 的情况下，我们希望表达式表达出一个什么样的意思(当然要排除在代码清单4-4中最开始测试是否为null的情况)?
                                                    // 答：death - birth 这个表达式是有用的，但是结果就会是一个 TimeSpan?，而不是 TimeSpan。用 TimeSpan? 只是将问题转嫁到了调用者身上，他要再次判断。
            }
        }

        public Person(string name, DateTime birth, DateTime? death)
        {
            this.birth = birth;
            this.death = death;
            this.name = name;
        }



    }
}
